package HRMPROJECT.MODELS;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;

public class EmployeesModels {
    private Connection m_objConnection = null;
    private CallableStatement m_objST = null;
    private ResultSet m_objRS = null;

    public EmployeesModels(Connection obj_Connection) {
        // Khởi tạo các đối tượng
        m_objConnection = obj_Connection;
    }

    /* Hiển thị toàn bộ thông tin sinh viên từ hệ thống */
    public ResultSet getElementAll() throws SQLException {
        try {
            // 1. Kiểm tra trạng thái kết nốibj
            if (!m_objConnection.isClosed()) {
                m_objST = m_objConnection.prepareCall("{call Y2016JC29P_GET_EMPLOYEES_ALL()}");

                // 2. Thực thi truy vấn
                m_objRS = m_objST.executeQuery();
            }
        } catch (SQLException ex) {
            throw ex;
        }
        return m_objRS;
    }

    public ResultSet getElementById(int Id) throws SQLException {
        try {
            // 1. Kiểm tra trạng thái kết nốibj
            if (!m_objConnection.isClosed()) {
                m_objST = m_objConnection.prepareCall("{call Y2016JC29P_GET_EMPLOYEES_BY_DEPARTID(?)}");
                m_objST.setInt("DepartId", Id);

                // 2. Thực thi truy vấn
                m_objRS = m_objST.executeQuery();
            }
        } catch (SQLException ex) {
            throw ex;
        }
        return m_objRS;
    }

    /* Nghiệp vụ thêm sinh viên vào danh sách */
    public boolean InsertElement(EmployeesEntity objEntity) throws SQLException {
        try {
            if (!m_objConnection.isClosed()) {
                m_objST = m_objConnection.prepareCall("{call Y2016JC29P_INSERT_EMPLOYEES(?,?,?,?,?,?)}");
                // 2. Thiết lập tham số cho Store Procedure
                m_objST.setString("FullName", objEntity.getFullName());
                m_objST.setString("Address", objEntity.getAddress());
                m_objST.setString("Phone", objEntity.getPhone());
                m_objST.setInt("Rank", objEntity.getRank());
                m_objST.setBoolean("Status", objEntity.isStatus());
                m_objST.setInt("DepartId", objEntity.getDepartId());

                // 3. Thực thi truy vấn
                m_objST.execute();
            }
        } catch (SQLException e) {
            throw e;
        }
        return true;
    }

    // Nghiệp vụ cập nhật thông tinh sinh viên
    public boolean UpdateElement(EmployeesEntity objEntity) throws SQLException {
        try {
            if (!m_objConnection.isClosed()) {
                m_objST = m_objConnection.prepareCall("{call Y2016JC29P_UPDATE_EMPLOYEES(?,?,?,?,?,?,?)}");

                m_objST.setInt("EmpId", objEntity.getEmpId());
                m_objST.setString("FullName", objEntity.getFullName());
                m_objST.setString("Address", objEntity.getAddress());
                m_objST.setString("Phone", objEntity.getPhone());
                m_objST.setInt("Rank", objEntity.getRank());
                m_objST.setBoolean("Status", objEntity.isStatus());
                m_objST.setInt("DepartId", objEntity.getDepartId());

                // 3. Thực thi truy vấn
                m_objST.execute();
            }
        } catch (SQLException ex) {
            throw ex;
        }
        return true;
    }

    // Nghiệp vụ xóa thông tin sinh viên
    public boolean DeleteElement(EmployeesEntity objEntity) throws SQLException {
        try {
            if (!m_objConnection.isClosed()) {
                m_objST = m_objConnection.prepareCall("{call Y2016JC29P_DELETE_EMPLOYEES(?)}");

                m_objST.setInt("EmpId", objEntity.getEmpId());
                m_objST.execute();
            }
        } catch (SQLException e) {
            throw e;
        }
        return true;
    }
}
